// 判断两个数组是否相等
// 前提:数组可能出现嵌套, 每层数组的元素都是简单数据类型
// 判断相等的条件“数组元素顺序和每层元素的值相同

// a1= [1]
// a2 = ['1'] //false

// a1 = [1, 2]
// a2 = [1, [2]] // false

// a1 = [1, 2, 3, 4]
// a2 = [1, 2, 3, 4] // true

// a1 =['a', ['b', ['c']], 'd']
// a2 =['a', ['b', ['c']], 'd'] // true


Array.prototype.equals = function(arr) {
    if (!arr) return false;
    if (this.length !== arr.length) return false;
    for(var i = 0; i < this.length; i++) {
        if (Array.isArray(this[i]) && Array.isArray(arr[i])) {
            if(!this[i].equals(arr[i])) return false;
        } else if (this[i] !== arr[i]) {
                return false;
        };
    };
    return true;
};

console.log([1].equals(['1']))
console.log( [1, 2, 3, 4].equals([1, 2, 3, 4]))
console.log( [1, 2].equals( [1, [2]]))
console.log( ['a', ['b', ['c']], 'd'].equals(['a', ['b', ['c']], 'd']))



// 注意 通过prototype增加 方法是可枚举的  class类型添加的是不可枚举的
let arr = [234, 5, 6, 7];

// Object.defineProperty(arr, 'equals', {
//     enumerable: false
// })

for (const key in arr) {
    console.log(key);
};

// console.log(Object.keys.call(null, arr)) 
